package com.example.mysql.学习笔记.高级.数据库的优化之索引.索引的创建和设计原则;

public class 索引的分类 {
}
/**
 *1.1索引的分类
 * MySQL的索引包括普通索引、唯一性索引、全文索引单列索引、多列索引和空间索引等。
 * ● 从功能逻辑上说，索引主要有4种,分别是普通索引、唯-索引主键索引、全文索引。
 * ● 按照物理实现方式，索引可以分为2种:聚簇索引和非聚簇索引。
 * ● 按照作用字段个数进行划分，分成单列索引和联合索引。
 *
 */
/**
 * 普通索引
 * 在创建普通索引时，不附加任何限制条件，只是用于提高查询效率。
 * 这类索引可以创建在任何数据类型中，其值是否唯- -和非空,要由字段本身的完整性约束条件决定。
 * 建立索引以后，可以通过索引进行查询。
 * 例如，在表student的字段name.上建立一个普通索引，查询记录时就可以根据该索引|进行查询。
 *
 *
 */

/**
 * 唯一性索引
 * 使用UNIQUE参数可以设置索引为唯一性索引,
 * 在创建唯一性索引时， 限制该索引的值必须是唯一的, 但允许有空值。
 * 在一张数据表里可以有多个唯一索引。
 * 例如，在表student的字段email中创建唯一性索引，那么字段email的值就必须是唯一的。
 * 通过唯一性索引,可以更快速地确定某条记录。
 *
 *
 */
/**
 * 主键索引
 * 主键索引就是一种特殊的唯一性索引 ，在唯一索引的基础上增加了不为空的约束，
 * 也就是NOT NULL+UNIQUE，一张表里最多只有一个主键索引。
 * Why?这是由主键索引的物理实现方式决定的，因为数据存储在文件中只能按照一种顺序进行存储。
 *
 *
 */

/**
 * 4.单列索引
 * 在表中的单个字段.上创建索引。单列索引只根据该字段进行索引。
 * 单列索引可以是普通索引，也可以是唯一性索引,还可以是全文索引。
 * 只要保证该索引只对应一个字段即可。-个表可以有多个单列索引。
 *
 */

/**
 *5.多列(组合、联合)索引
 * 多列索引是在表的多个字段组合上创建一个索引。
 * 该索引指向创建时对应的多个字段，可以通过这几个字段进行查询，
 * 但是只有查询条件中使用了这些字段中的第一个字段时才会被使用。
 * 例如,在表中的字段id、name和gender上建立一个多列索引idx_ id_ name. gender ，
 * 只有在查询条件中使用了字段id时该索引才会被使用。
 * 使用组合索引时遵循最左前缀集合。
 *
 */

/**
 *6.全文索引  适合大型数据集
 * 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。
 * 它能够利用[分词技术]等多种算法智能分析出文本文字中关键词的频率和重要性，
 * 然后按照一定的算法规则智能地筛选出我们想要的搜索结果。
 * 全文索引非.常适合大型数据集，对于小的数据集，它的用处比较小。
 * 使用参数FULLTEXT可以设置索引为全文索引。
 * 在定义索引的列上支持值的全文查找，允许在这些索引列中插入重复值和空值。
 * 全文索引只能创建在CHAR、VARCHAR 或TEXT类型及其系列类型的字段上，
 * 查询数据量较大的字符串类型的字段时，使用全文索引可以提高查询速度。
 * 例如，表student的字段information是TEXT类型,该字段包含了很多文字信息。
 * 在字段information 上建立全文索引后，可以提高查询字段information的速度。
 * 全文索引典型的有两种类型:""""自然语言的全文索引和布尔全文索引""""。
 * ● 自然语言搜索引擎将计算每一个文档对象和查询的相关度。
 *   这里，相关度是基于匹配的关键词的个数，以及关键词在文档中出现的次数。
 *   在整个索引中出现次数越少的词语，匹配时的相关度就越高。
 *   相反,非常常见的单词将不会被搜索，如果一个词语的在超过50%的记录中都出现了，
 *   那么自然语言的搜索将不会搜索这类词语。
 * MySQL数据库从3.23.23版开始支持全文索引，但MySQL5.6.4I以前 只有Myisam支持，
 * 5.6.4版本以后 innodb才支持，但是官方版本不支持中文分词，需要第三方分词插件。
 * 在5.7.6版本, MySQL内置了 ngram全文解析器，用来支持亚洲语种的分词。
 * 测试或使用全文索引时，要先看-下自己的MySQL版本.存储引擎和数据类型是否支持全文索引。
 *
 * 随着大数据时代的到来,关系型数据库应对全文索引的需求已力不从心，
 * 逐渐被solr 、ElasticSearch 等专门的搜索引擎所替代。
 *
 */

/**
 *7.补充:空间索引
 * 使用参数SPATIAL可以设置索引为空间索引。
 * 空间索引只能建立在空间数据类型上，这样可以提高系统获取空间数据的效率。
 * MySQL中的空间数据类型包括GEOMETRY、POINT、 LINESTRING 和POLYGON等。
 * 目前只有MyISAM存储引擎支持空间检索，而且索弓的字段不能为空值。
 * 对于初学者来说，这类索引很少会用到。
 *
 * 小结:不同的存储引擎支持的索引类型也不一样
 * InnoDB:支持B-tree、Full-text 等索引，不支持Hash索引;
 * MyISAM:支持 B-tree、Full-text 等索引，不支持Hash索引;
 * Memory :支持B-tree、Hash 等索引，不支持Fll-text索引;
 * NDB :支持Hash索引不支持B-tree、Full-text 等索引;
 * Archive :不支持B-tree、Hash、 Full-text 等索引;
 *
 *
 */